package sun.superstring;

public class StoneMazeTest5 {
    public static void main(String[] args) {
        // 目标：完成数组华容道的初始化和随机乱序
        start(4 );
    }
    
    public static void start(int n) {
        // 1.定义一个二维数组存储数字列表
        int[][] maze = new int[n][n];

        // 2.遍历二维数组，给二维数组赋值
        int count = 1;
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                maze[i][j] = count++;
            }
        }
        printArray(maze);

        // 3.打乱二维数组中的元素顺序
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                // 遍历到当前的位置 maze[i][j]
                // 随机的索引处：randomRow（随机的行） randomCol（随机的列）
                int randomRow = (int) (Math.random() * maze.length);
                int randomCol = (int) (Math.random() * maze[i].length);

                // 定义一个临时变量temp存储当前位置的元素
                int temp = maze[i][j];
                // 将随机位置的元素赋值给当前位置
                maze[i][j] = maze[randomRow][randomCol];
                // 将当前位置的元素赋值给随机位置的元素
                maze[randomRow][randomCol] = temp;
            }
        }

        System.out.println("================================");
        System.out.println("打乱后的数组：");
        printArray(maze);
    }

    public static void printArray(int[][] maze) {
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                System.out.print(maze[i][j] + "\t");
            }
            System.out.println();
        }
    }
}
